今天的學習目標是認識醫療資料共享過程中的「存取紀錄與審計」的重要性,理解除了病人同意之外,還必須記錄誰在什麼時間存取過紀錄,才能符合 HIPAA 等法規要求,並能透過程式模擬存取紀錄與透明查詢,確保醫療共享更安全合規。
一、理論重點
二、案例分享
美國 HIPAA(健康保險可攜與責任法案)規範醫療機構必須保留「誰在什麼時間存取病歷」的完整紀錄。曾有案例揭露,某醫院員工非法查閱名人病歷,事後正是透過審計追蹤紀錄才發現異常,並對涉事員工進行處分。這顯示審計與存取紀錄是保護病人隱私、落實責任追蹤的重要機制。
三、簡單程式示範
class ConsentWithLog:
def __init__(self):
self.consent = {}
self.access_log = {}
def give_consent(self, patient_id):
self.consent[patient_id] = True
print(f" 病人 {patient_id} 同意分享紀錄")
def revoke_consent(self, patient_id):
self.consent[patient_id] = False
print(f" 病人 {patient_id} 撤回同意")
def check_access(self, patient_id, requester):
if self.consent.get(patient_id, False):
result = "允許"
print(f" {requester} 存取 {patient_id} 的紀錄 ")
else:
result = "拒絕"
print(f" {requester} 存取 {patient_id} 的紀錄 ")
# 寫入紀錄
self.access_log.setdefault(patient_id, []).append((requester, result))
def show_log(self, patient_id):
print(f" 病人 {patient_id} 的存取紀錄:")
for r, res in self.access_log.get(patient_id, []):
print(f" - 機構: {r} | 結果: {res}")
# ---- 測試流程 ----
contract = ConsentWithLog()
contract.give_consent("PatientA")
contract.check_access("PatientA", "Hospital")
contract.check_access("PatientA", "ResearchLab")
contract.revoke_consent("PatientA")
contract.check_access("PatientA", "InsuranceCompany")
contract.show_log("PatientA")
這段程式碼在原本病人同意機制上加上了「存取紀錄功能」。ConsentWithLog 類別除了管理病人是否同意 (self.consent) 外,還新增 self.access_log 來保存每次存取的結果。當 check_access 被呼叫時,會依病人是否同意決定「允許」或「拒絕」,並把請求人與結果一起記錄下來。最後透過 show_log 可以查詢特定病人的所有存取紀錄。測試流程中,PatientA 先同意分享,醫院與研究單位能存取;撤回後保險公司就被拒絕,最後列出的存取紀錄清楚顯示每次的操作結果,實現了可追蹤與透明化的存取控管。執行結果如下圖